//数字的补数
//https://leetcode.cn/problems/number-complement/
class Solution {
public:
    int findComplement(int num) {
        int ret = 0;
        int n = (int)pow(2,30);
        while((n&num) == 0) n>>=1;
        //将最高位后面的二进制位全部置为1 然后与原数异或即可
        //需要注意30位溢出的情况
        return num ^ (n==(int)pow(2,30)?0x7fffffff:((n<<1)-1));
    }
};